#include <assert.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define FILE_NAME(number) "log.txt"#number

//每一个宏，对应的数值，只有一个比特位是1，彼此位置不重叠
#define ONE (1<<0)
#define TWO (1<<1)
#define THREE (1<<2) 
#define FOUR (1<<3)

void show(int flags)
{
    if(flags & ONE) printf("one\n");
    if(flags & TWO) printf("two\n");
    if(flags & THREE) printf("three\n");
    if(flags & FOUR) printf("four\n");

}
int main()
{
    int fd0 = open(FILE_NAME(1),O_WRONLY | O_CREAT | O_TRUNC,0666);//设置文件起始权限为0666
    int fd1 = open(FILE_NAME(2),O_WRONLY | O_CREAT | O_TRUNC,0666);//设置文件起始权限为0666
    int fd2 = open(FILE_NAME(3),O_WRONLY | O_CREAT | O_TRUNC,0666);//设置文件起始权限为0666
    int fd3 = open(FILE_NAME(4),O_WRONLY | O_CREAT | O_TRUNC,0666);//设置文件起始权限为0666
    int fd4 = open(FILE_NAME(5),O_WRONLY | O_CREAT | O_TRUNC,0666);//设置文件起始权限为0666
    
    printf("stdin->fd:%d\n",stdin->_fileno);
    printf("stdout->fd:%d\n",stdout->_fileno);
    printf("stderr->fd:%d\n",stderr->_fileno);

    printf("fd:%d\n",fd0);
    printf("fd:%d\n",fd1);
    printf("fd:%d\n",fd2);
    printf("fd:%d\n",fd3);
    printf("fd:%d\n",fd4);
    close(fd0);
    close(fd1);
    close(fd2);
    close(fd3);
    close(fd4);
//    umask(0);//将进程的umask值设置为0000
//
//    // C语言中的w选项实际上底层需要调用这么多的选项O_WRONLY O_CREAT O_TRUNC 0666
//    // C语言中的a选项需要将O_TRUNC替换为O_APPEND
//    int fd = open(FILE_NAME,O_RDONLY,0666);//设置文件起始权限为0666
//    if(fd < 0)
//    {
//        perror("open");
//        return 1;//退出码设置为1
//    }
//    char buffer[1024];
//    ssize_t num = read(fd,buffer,sizeof(buffer)-1);
//    if(num > 0) buffer[num]=0;//字符数组中字面值0就是\0
//    printf("%s",buffer);











//    int cnt = 5;
//    char outbuffer[64];
//    while(cnt)
//    {
//        sprintf(outbuffer,"%s:%d\n","aaaa",cnt--);
//        //以\0作为字符串的结尾，是C语言的规定，和文件没什么关系，文件要的是字符串的有效内容，不要\0
//        //除非你就想把\0写到文件里面取，否则strlen()不要+1
//        write(fd,outbuffer,strlen(outbuffer));
//    }
//    printf("fd:%d\n",fd);// 文件描述符的值为3
//    close(fd);





//    show(ONE);
//    printf("---------------------\n");
//    show(TWO);
//    printf("---------------------\n");
//    show(ONE | TWO);
//    printf("---------------------\n");
//    show(ONE | TWO | THREE);
//    printf("---------------------\n");
//    show(ONE | TWO | THREE | FOUR);
//    printf("---------------------\n");



    //FILE*fp = fopen(FILE_NAME,"a");
   // FILE*fp = fopen(FILE_NAME,"w");
    //FILE*fp = fopen(FILE_NAME,"r");
    // r、w、r+(读写，文件不存在就出错)、w+(读写，文件不存在就创建文件)、a(append,追加，只写的形式打开文件)、a+(以可读写的方式打开文件)    
   // if(fp==NULL) {
   //     perror("fopen");
   //     exit(1);
   // }

   // int cnt = 5;
   // while(cnt)
   // {
   //     fprintf(fp,"%s:%d","hello wyn",cnt--);// 对文件进行写入
   // }
    //fclose(fp);
  //  char buffer[64];
  //  while(fgets(buffer,sizeof(buffer) - 1,fp) != NULL)// sizeof-1的原因是有给文本末尾留一个位置，让fgets放terminating null character
  //  {
  //      buffer[strlen(buffer)-1]=0;//把换行符改成结束符   
  //      puts(buffer);
  //  }
  //  fclose(fp);
    return 0;
}
